/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.segu.manager;


import com.brain.core.exception.DAOException;
import com.brain.core.hibernate.dao.DAOGenerico;
import com.brain.core.manager.ComunManager;
import com.brain.segu.dto.PermisoRolDto;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;

/**
 *
 * @author Indra
 */
@Service
public class PermisoRolManager extends ComunManager<PermisoRolDto>  implements Serializable {
    @Resource
    private DAOGenerico<PermisoRolDto> springHibernateDao;
    
    /**
     * Retorna todos los permisos
     * @return Lista de Permisos
     * @throws DAOException 
     */
    public List<PermisoRolDto> obtenerTodos() throws DAOException {        
        return springHibernateDao.listarTodosDtos(PermisoRolDto.class);
    }    
    
    /**
     * Retorna todos los permisos de acuerdo a unos filtros
     * @param filtros Mapa de filtros
     * @return Lista de Permisos
     * @throws DAOException 
     */
    public List<PermisoRolDto> obtenerConFiltro(Map<String, Object> filtros) throws DAOException {
        return springHibernateDao.obtenerDtosConFiltros(PermisoRolDto.class, filtros);
    }
    
    /**
     * Retorna todos los permisos ordenados de acuerdo a unos filtros
     * @param filtros Mapa de filtros
     * @param orden Mapa de orden
     * @return Lista de Permisos
     * @throws DAOException 
     */
    public List<PermisoRolDto> obtenerConFiltroConOrden(Map<String, Object> filtros,Map<String,String> orden) throws DAOException {
        return springHibernateDao.obtenerDtosConFiltrosConOrden(PermisoRolDto.class, filtros,orden);
    }  
    
    /**
     * Retorna todos los permisos de un rol
     * @param rolId id del rol
     * @return lista de permisos
     * @throws DAOException 
     */
    public List<PermisoRolDto> permisosPorRol(Long rolId) throws DAOException {
        Map<String, Object> filtros = new HashMap<String, Object>();
        filtros.put("rolDto.id", rolId);
        Map<String,String> orden = new HashMap<String, String>();
        orden.put("opcionSistemaDto.descripcion", "asc");
        return springHibernateDao.obtenerDtosConFiltrosConOrden(PermisoRolDto.class, filtros,orden);
    }
    
    /**
     * Retorna todos los permisos de un rol y una opcion de sistema
     * @param rolId Id del Rol
     * @param opcionSistemaId Id de la Opcion de Sistema
     * @return Lista de permisos
     * @throws DAOException 
     */
    public PermisoRolDto obtenerPermisoOpcionRol(Long rolId, Long opcionSistemaId) throws DAOException {
        Map<String, Object> filtros = new HashMap<String, Object>();
        filtros.put("rolDto.id", rolId);
        filtros.put("opcionSistemaDto.id", opcionSistemaId);
        Map<String,String> orden = new HashMap<String, String>();
        orden.put("opcionSistemaDto.descripcion", "asc");
        List<PermisoRolDto> l = springHibernateDao.obtenerDtosConFiltrosConOrden(PermisoRolDto.class, filtros,orden);
        if (l!=null&&l.size()>0)
            return l.get(0);
        else
            return null;
    }
    
    /**
     * Retorna todos los permisos activos de un rol y una referencia
     * @param rolId Id rol
     * @param referenciaId Id Referencia
     * @return Lista de Permisos
     * @throws DAOException 
     */
    public PermisoRolDto obtenerPermisoRolReferencia(Long rolId, Long referenciaId) throws DAOException {
        Map<String, Object> filtros = new HashMap<String, Object>();
        filtros.put("rolDto.id", rolId);
        filtros.put("opcionSistemaDto.referencia", referenciaId);
        filtros.put("opcionSistemaDto.activo", Boolean.TRUE);
        Map<String,String> orden = new HashMap<String, String>();
        orden.put("opcionSistemaDto.descripcion", "asc");
        List<PermisoRolDto> l = springHibernateDao.obtenerDtosConFiltrosConOrden(PermisoRolDto.class, filtros,orden);
        if (l!=null&&l.size()>0)
            return l.get(0);
        else
            return null;
    }
    
    /**
     * Retorna un permiso por su Id
     * @param id Id Permiso
     * @return Permiso
     * @throws DAOException 
     */
    public PermisoRolDto obtenerPorId(Long id) throws DAOException {
       return springHibernateDao.obtenerDtoPorId(PermisoRolDto.class, id);
    }   
    
    
}
